This is quite effective on a server with 8 cores (two quad Xeons) and 4G of RAM, as by the time you've given each VM 512M of RAM, there's plenty of cores to go around. It would be more problematic on a single or dual core machine, though.
There are still a couple of ways a single VM can kill the box, though: it can max out the disks (so you really don't want to be running out of memory, unless you have a dedicated swap drive, so swap doesn't compete with normal disk access) and it can max out the network bandwidth.
In a hosting environment you'd probably want to set up some sort of internal traffic shaping so the each VM has a fair go at the available bandwidth, and you'd also want to keep swap partitions on a separate disk to data. This way if a couple of VMs run out of memory, they compete for the swap disk but other VMs that are within their limits and don't touch the swap disk don't see a problem.
I don't know, but I imagine you might be able to do some magic with LVM to balance disk transactions/throughput between logical volumes...
The ability to (relatively) quickly deploy a blank VM for development is great, too. It means you can give people more control over things. If you have lots of dev sites used for demos, there's the danger that someone might make a mistake editing httpd.conf and bring it all down, but if they're all in separate VMs, you don't need to worry.