We've recently incorporated TWAIN into one of our apps. We looked at WIA but in the end TWAIN is much more flexible and can connect to apps such as VRS (Virtual ReScan). In the end it's 'pull', you request a scan and then wait for the scanner. One of the nice things with VRS is that it's software between our TWAIN calls and the device, as such, it takes care of a few things, one of which is it will can wait, virtually forever, for paper to be placed in the hopper for scanning. This allows the ability to 'start' a scan job and then wait for the paper, it also allows for additional pages to be added to the unit.
If you are looking for something a little more 'push' oriented then look to a scanner or MFP that supports ftp/smb/email etc. and let it scan and you can simply monitor a folder or POP3 mailbox for the job.
You can also look to MFP devices that include (sometimes at additional cost) tools to help such as Xerox's Template, Lexmark's LDSS, HP's DSS.
Here is a link to the .NET TWAIN code we based our scanner integration with:
http://www.codeproject.com/KB/dotnet/twaindotnet.aspx