Hi,
Setting reference at runtime is easy. several ways to do it.
If a GameObject fires an event, you can use "Get Event info" to know who sent it. So as your monster prefab Fsm Starts, it could fire an event "MONSTER IS HERE!" event and anyone interested in getting its reference can do by implementing that global event and get it's reference.
you can also manually set event data ( the gameObject property of "set event data") and then fire an event like "NEW PLAYER IS HERE!". You can also add a string data as well, so you could pass both the reference of the gameObject and in the string property something like "monster" and anyone who do not care about monster would simply receive that event, check its string value and do nothing if it's not what they are interested in.
you can also manually set a Fsm variable from other Fsm. So using "Set Fsm gameObject", you can target a specific Fsm and set one of it's gameobject variable.
And finally, you can also use "Find gameObject", either by name and or by tag.
Also, remember that prefab CAN NOT store reference of scenes objects, just as a warning, cause it's easy to forget about it. during run time when you instantiate a prefab you can then query and store gameobject reference in the scenes, but if you plan on keepin that reference in the prefab itself, it simply won't, that's a unity restricition.
bye,
Jean