Using the Arduino as an ISP (In-System-Programmer)
An Arduino can be used as an ISP for other Arduinos, and even for bare ATmega ICs. This way, you can easily build your custom microcontroller from scratch, using your Arduino as a programmer. The software used is the "Arduino ISP" example that comes shipped with Arduino.
This example also includes the PCB design for a handy programmer shield.
Except for the ATmega IC, all the other parts are optional.