We do an internal hack day modeled after Atlassian ShipIt (or as they called it and we do 'Fedex Day'). We've only had two since we started (year and a half) but aim to have one per quarter or every other quarter.
In our experience, they were a major boost to morale and some really interesting ideas came out of them, several of which have been implemented fully in our core products.
I'm a big advocate for these. We couldn't really pull off 20% but giving developers opportunities to work on their ideas within the company is really important.