I've done something similarish recently. More specifically a bootloader to update Atmega's in a multi-node CAN bus arrangement by having a CAN-USB interface module to plug onto the bus.
Anyhow, you've got a few references there but your missing the most important ones (at a guess by your question, I'm not going to try and read them all.) You need to go get the Atmel application notes on bootloaders. You also need to have a look at the boot.h header file reference for avr-gcc.
http://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html, as this is most likely what you'll use to write the bootloader if you write your own.
So hopefully you'll have a look at this and understand how an AVR with bootloader area can write pages to the flash by filling the page buffer, setting a page address pointer then using the store program memory command.
From there, it's all up to you. Yes you could write something to interface with someone else's bootloader, but I recon it's often easier just to write one to do what you need it to do. Also, what I did to make life easier for myself, instead of writing my own code to decode Intel hex format files (which isn't that hard, but I was lazy), I just used hex2bin. This will take your Intel hex format file and produce a pure binary, which is exactly what needs to be written to your flash. Therefore you could just put a .bin file on you SDCARD and basically parse it to the uC being flashed.