I don't think BlockFamily needs to be involved in that. You can work out what side(s) a block is attached to by checking which sides it can attach on are touching sides of adjacent blocks that can be attached to.

In the crudest sense, this is any side with a blockMeshPart - that means the block touches on that side. Block probably should have a method encapsulating this - canAttachOnSide() or something - so that this can be refined in the future. Probably should be overrideable in the block definition as needed.