Well, I ended up creating an invisible tiled background for each lane.
Then when any unit of the family is overlapping it and has as the same Y as the lane, it can create an object. I register which lanes are free and occupied.
If the current lane is chosen but occupied, I call the function again that chooses a random lane which isn't occupied.
It's probably not an ideal solution but it works for now.