The way I've approached it is this:
I have a master node. This device is the mothership, sending out commands and telling everyone else what to do. For the sake of this conversion, I'm using an LPC1769 (Cortex-M3) which has two on-board CAN controllers, so I have two TJA1050 transceivers to make the connections to the actual CAN buses.
My peripheral devices that sit on the bus use a LPC11C24. It's a Cortex-M0 with a built-in CAN transceiver, so I can keep the external component count nice and low, and in turn, keep the peripheral boards and enclosures even smaller.
Every time the peripherals boot up, they go to the bootloader. They check if they need to be programmed. If so, they request to be programmed by the master which follows similarly to Rocketmagnet's answer above. The only twist is that if they are programmed, they check to see if they are up-to-date. If the master has a newer version of firmware than they do, they will also request to be updated.
This approach allows me to not only stick a fresh peripheral on the bus and have it "just work," but it allows me to push new firmware to them as well all through the master. All the updates come from the same place. To update firmware on my master device, I make it present itself as a USB mass storage device and I can drag-and-drop files on to it.
You could use whatever protocol you wanted to... 1-Wire, I2C, SPI, CAN, etc. The operating parameters and the length limitations are clearly documented with a simple Google search. Realistically, CAN is probably the best choice. It was designed with long runs in bad environments in mind. It's relatively fast considering that most firmware for a microcontroller is only a few kBs, maybe tens of kB. Also, it only requires two wires, which means you could daisy chain devices with as few as four wires. 1-Wire would only need 3, and I2C would only need four, but they're pretty "meh" compared to CAN. :P
Now, if you had all devices with an LPC1769, it supports Ethernet with a small helper IC. You could have all the devices connect over Ethernet and transfer lots of data to bootstrap themselves from the master. It sounds like you are just looking to do simple firmware transfers... but it's some food for thought. :)