Hard to say what you're going for, but you can always defer function calls to the next frame. Though be mindful of it, as it can become a bit of a timing nightmare very easily.
func _init(path):
call_deferred("delayed_init", path)
func delayed_init(path):
print(get_node(path))
Aside from that, assuming that you want to do something that falls outside of the default events of Godot, you may want to manage things yourself, create your own init type functions. Something like a setup()
and just make sure you have it called from outside during the time you want it to happen.
You would need some parent node or global manager that will use all of these standard functions to query the state of the scene. Then you create the objects, keeping a reference in the manager code. Don't do anything in their init, ready, enter, or exit. When the manager sees that you're on the frame you want to be on, or when the tree is all setup the way you want it, loop through them and call your setup function.
As an example, I had a project where there were a bunch of nodes needing other nodes to be setup completely. It would vary if they were 1, 2, sometimes 3 frames after enter or ready happened. My solution was the manager, that would loop in fixed_process()
until it could verify all the nodes were in the state I needed them in. Only then would it announce to all the other nodes they could begin doing their setups.