If you don't have to follow a standard, invent your own. I would suggest reading all the information you can about CANopen, which is a master / slave protocol system, you can base your system on that.
I would start by making a list of what messages you need to send, and who sends them along with priority of message. Avoid using 0x000 and 0x7FF arbitration IDs (or 0x00000000 and 0x1FFFFFFF if you want 29 bit IDs) and make each node unique. You don't want 2 slaves trying to send the identical message to the master at the same time, assign messages to each individual slave if you can. Then start assigning numbers to them, remember that the lower numbers win CAN arbitration, so the lower the number, the highter the priority the message will have.
Then when you have that sorted out, you will end up with messages the master needs, and messages the slave nodes need or can ignore.
Some people try to make 1 version of software for both the slave and the master. (you use a set of switches, connectors, or Non-volatile memory flags to tell the node if it is a master or slave when it runs) Others will write 2 seperate versions of software, a file for only the master, and another one for only the slaves. Don't forget a way to tell each slave apart, if they all have the same slave code in them, then they need a serial number or set of switches to make each one unique.
J1939 (which is a standard available for a fee from Scociety of Automotive Engineers www.sae.org) is more of a peer to peer network. Some of the CANopen specs are avilable for free, but others may require paying for them.
Remember, this can be complicated stuff, but there are lots of people out there who have made it work (including myself)