Alexey, you should understand how caches startup and partition map exchange work. I would suggest you start couple of nodes in single VM and simply do step-by-step debug in your IDE.
I don't think you will need to introduce any new message, but I think you will have to add info to GridDhtPartitionsSingleMessage and GridDhtPartitionsFullMessage. These messages are being sent via communication as you described. Thanks! --Yakov