The only concern I have with giving programming puzzles for hiring is that it can be quite the burden on candidates. This is fine if your company is a top player and candidates REALLY REALLY want to work for you, but if you aren't that established (like as a startup), the candidates might not like the amount of effort needed to apply. We tried this for some interns a while ago and about half balked at the idea and it wasn't necessarily the "bad" half.
Top talent are going to have options. If you ask too much too early, they may just wonder if it's worth 10 hours of coding up front to get the honour of applying to your company. One should always look for code before hiring, but it shouldn't be done in a way where you are filtering out the non-desperate as well as the incompetent.