<p>Does anyone have any experience with doing this?  I'm working on a Java decompiler right now in C++, but would like a higher level language to do the actual transformations of the internal trees.  I'm curious if the overhead of marshaling data between languages is worth the benefit of a more expressive and language for better articulating what I'm trying to accomplish (like Haskell).  Is this actually done in the "real world", or is it usually pick a language at the beginning of a project and stick with it?  Any tips from those who have attempted it?</p>

I'm a big advocate of always choosing the right programming language for each challenge. If there is another language which handles some otherwise tricky task easily, I'd say go for it.
Does it happen in the real world? Yes. I am currently working on a project which is made up of both PHP and objective-c code.
The trick is, as you pointed out, the communication between the two languages. If at all possible, let each language stick to its own domain, and have the two sections communicate in the simplest way possible. In my case, it was XML documents sent via http. In your case, some kind of formatted text file might be the answer.