For me, the best way to locate a node is to have it on a group (like "zombie_target"), then, if it is going to be used all the time prepare a instance variable to store a reference to the node:
var target = null
Then on _ready or a function triggered by something (like a timer, animation, etc.) do
var target_group = get_tree().get_nodes_in_group("zombie_target")
if target_group.size() > 0:
target = target_group[0]
when processing and trying to use the variable
if target != null:
do_something_with_target()
#else search_for_target_again?
You need null checks in case you free the target or for some reason enters later to the scene (and to try to find it again if "respawn"), also to test it without a target.
Using groups you can mark anything (with position) as target and test your zombies.
Depends on the design but the reverse can be done too, mark the zombies as "enemy" and then (when player is ready) make the player do get_tree().call_group(SceneTree.GROUP_CALL_DEFAULT,"enemy","set_target",self)
where enemy.set_target
sets the target property.