Jims answered the previous question, and gave the code necessary to use different bootstraps.
If the ATmega168's bootloader is still around 1K, you could even use an ATmega8 to write it to the 168. (and other atmel microcontrollers)
You'll probably need to change the bootloader size, and memory location constants in the sketch.
David Cuartielles requested an explanation of the procedure used for cloning, so I've added that to the playground BootCloner article... I think I understood what he meant by procedure, in retrospect he might have wanted to source code desribed better. :
The original bootloader table data in that sketch was extracted from the hex file by a small basic program. It was a quick and dirty program that I threw away afterwards.
I think this'll be a recurring issue, so here's what I plan to do in the next couple weeks.
Plan A: An elegant solution would be to modify the sketch so the plain text contents of a hex file can be pasted into the bootloader table. It might take too much program memory to do it this way. (1K vs 2.4K and the flash write code would be bigger)
If Plan A doesn't work;
Plan B: (in addition to jims program) Add Mac/Win/Linux applications for ihex data extraction; just to quickly get it compiled for multiple platforms with a friendly GUI. I'd write it in RealBasic: OS X Carbon, Win32 (95/98/2000/XP), and Linux (I forget which linux, exactly). I could make a VisualBasic 2005 (Win32 only) project, too - if somebody wants that. RB and VB are nearly identical, except RB can compile a project for multiple platforms. (I'm guilty of falling back on languages I've got the most experience with)
...Plan Z: Whip up another new project aptly named Fanout, which allows an Arduino to completely program any atmel microcontroller. It would use the same technique as the BootCloner, but instead of storing just the bootloader in flash memory it'd write a lot more than 2K, by listening to the serial port and programming the target avr with data it receives.
With the Fanout program on the Arduino's ATmega8, nice things like target automatic reset and programming a target with no bootloader could also be done.
Since I started out with the Arduino, this is just kind of a natural evolution for me to programming other microcontrollers. And it's just what I'll end up doing... But I'll admit it's gonna a paradox for a lot of other people.
The ideal hardware for this thing might be an Arduino with just an SMD ATtiny, instead of an ATmega8 - which is used to program other microcontrollers held in a zif socket. I don't know if this would be a benefit for the Arduino community though, since it could be more for beginners to learn, more complex IDE/libraries and code in the playground wouldn't be as universal.
I'll probably do this between May~July, after doing Plan A or B and finishing that LCD article in the playground.