.... that way, when you click to move an npc to an area, the beacon won't spawn in that area if there's already one in the space, and so the next npc can't move. ...
Sounds like a valid solution to me. But. You gonna have all sort of little problems due the spawning. Mainly because you can not use a newly created object to evaluate things before the next top level event. You also need a system that pairs NPC to its target. That is easily done with instance variables, yet will force you in a lot of picking. And in the end you win nothing to little compared to the already proposed solution.
Still, it is handy to just have a target sitting on that place to just simple (Line of Sight) know if there is already a NPC heading to that place. I suggest bringing the target in a container with the NPC. Target will be picked when you pick the NPC. NPC will be picked when you pick the target. So, they are strictly paired up. When one dies, the other dies.