The LUFA Project is an open-source USB stack for AVR microcontrollers which feature a hardware USB interface. One of the USB device implementations which is included in the project sources is an AVR Programmer supporting the ISP, TPI and PDI protocols.
The documentation LUFA provides does not include a schematic, but it does provide enough information to work one out. This is an implementation of the hardware needed to support a basic programmer using the LUFA code.
It features as little hardware as possible to support as wide a range of target AVR chips as possible. It includes a logic level translator to allow programming targets of any voltage between 1.8 and 5V, which covers all current AVR chips, but does not include voltage reporting up to the programming software nor any additional isolation.
The board is not intended to provide power to a target, so your target will need to be powered from its own source. This also means the board will draw a small amount of power to drive the target side of the level shifter.
It also has a button to go into bootloader mode, so that the firmware on the programmer can be updated easily using a USB DFU tool, so no special hardware is required to update it. There is also support for replacing the bootloader using the target connector as a programming interface for the board itself.
First build has been completed, and largely works. The !RESET behaviour does not appear to be correct (it looks like !RESET is being held low when programming has completed), so there will be a 1.1 revision to fix this.