Actually I found the solution in which the official demo has shown.
1.You simply set the offset of each tile object (a sprite) to proper position.
(I suggest set to its central point of the ground plane)
2.And then set tile-origin to "center" in your tilemap node. So that your tile brush
will align to the tile.
The tile position isn't changed though, but we "offset" the sprite already.
So the sprite will be render at the upper-left of its tile position.
As a result, the "y-value" in y-sort of that tile is visually correct.
This is a side wall from my work (in case you can't tell...)
So we need to set the offset of the sprite to (-35, -345), which makes the new origin
to (35, 345).
Notice that Godot also set a new pivot after you change offset.
Here is my quick demo:
Fix render order