If your intern does work that you charge your client for, then of course it makes sense to compensate him or her.
At my unpaid internship, I came in with no programming experience. They basically paired me with sr. programmers so I could learn how to program efficiently, but was still too inexperienced to give me actual client work they could charge for. Believe me, I wouldn't want to charge the client either for the crap that I put out initially. But their investment will eventually pay off because when my skills strengthen enough to meet their standards, they'll hire me.
Our interns aren't "billable", but there's always plenty of work to be done to support the people doing billable work. Last year, one of our UIC interns wrote (in what I believe to be his first ever actual start-to-finish "program") a programmable symbolic process debugger for OS X, in Ruby:
http://bit.ly/13kxv3
Nobody paid us to do that, but that debugger work is now Ragweed, our house debugger, and we've got it working under Win32, Linux, and a couple embedded platforms. It's extremely useful. And we scored an excellent blog post out of it.
(Timur works for us full-time now, of course).
I don't have to compromise the work we deliver for our clients to put interns on useful projects. And we're a special case: we do hard core programming work on a billable basis. Most of the companies people talk about on HN don't have that problem. There's a million useful things an intern can do without jeopardizing product quality.
At my unpaid internship, I came in with no programming experience. They basically paired me with sr. programmers so I could learn how to program efficiently, but was still too inexperienced to give me actual client work they could charge for. Believe me, I wouldn't want to charge the client either for the crap that I put out initially. But their investment will eventually pay off because when my skills strengthen enough to meet their standards, they'll hire me.