I wouldn't consider it a good practice. When most people usually set up things like "nightly iisresets" or "nightly reboots," generally, it's because they are running an application that is poorly-written and leaks resources, to the point where the entire system may become unstable unless we restart the application, the service, or even entire system. The thing is, those people are ignoring the actual problem. (Or are unable to fix it.)
Fix the application to be stable and not leak resources, and then iisresets or system restarts will no longer be needed or helpful. Unfortunately, this is very prevalent with IIS web apps, to the point where IIS itself is designed around the idea that the applications it runs will be poorly-written and leaky. Otherwise there'd be no need to routinely recycle app pools, etc.
So to recap - if nightly iisresets are part of your strategy, it's because you have a poorly-written web application and the ideal thing to do would be to fix your app. (And yes, recycling app pools is better than an iisreset, as you can recycle an app pool without affecting every other website on your server.)
Edit: Here's a pretty neat blog post from a guy who basically says the same thing that I did, but he also claims that he always completely disables app pool recycling altogether, instead insisting that his team fix each and every last memory leak, which IMO is a pretty heroic and laudable effort:
http://thatextramile.be/blog/2010/06/why-do-we-recycle-our-application-pools/