OK, I have found a solution that seems to work pretty well. I will do my best to explain in simple terms/method.
First I have a main "player" that I move around with 8 directions behaviour. You can use whatever movement method you like.
Secondly I have a "node" sprite and "allies" sprites (which are to follow the player).
The "node" sprite has the behaviours of BOID (original boids not rex boids), as well as line of sight and custom movement. The "allies" have pathfinding behaviour only.
So I make a node for every instance of the allies (when ally is created, make node as well and pair together with instance variable for some kind of ID system - you can use UID if you like). The "nodes" are set to boid behaviour to flock with the other node instances, and target/destination to the main player, and the "allies" are set to path find to the node that belongs to their specific instance.
This works really well to simply pathfind to the location of the boid and avoid stacking up on top of each other. I will explain now the purpose of custom movement and line of sight...
I discovered that, when I walked into a box of solids (walls to make a room) that some boids would be inside the walls or on the wrong side of the wall to the player - causing the allies to pathfind to the incorrect place. I use the custom movement behaviour so if the boid node is overlapping a solid object (wall) then it will push out at angle towards the player. The line of sight is used as a correction to this because sometimes the boid will still push at some weird angle and through the wrong side of the solids (because the boid behaviour is trying to maintain the constraints you provide to it) so i check if line of sight is not available to simply set the node to be at player.x player.y, then the boid movement will take over for it again since it has line of sight once more.
If this is too confusing to follow I can make an example that demonstrates this - but I think I explained in simple terms how it will work.
~Sol