The AT89C51, and most of the other variants of 8051, use a parallel programming algorithm (20+ pins) that would be pretty difficult to implement on an ATmega328, probably requiring external latches and such to hold the extra bits.
As far as I know, there is no documented way to do this, nor any off-the-shelf solution.
Other 8051-like devices DO have an ISP capability similar to the AVRs, and might be writable with a modified version of ArduinoISP. AT89S52, for instance, and probably the low-pin-count devices (at89c2051)
Are you restricted to a particular device, or just looking for "some" 8051-type system?