There seem to be several processes that can cause a 20 second delay on shutdown. Here's how I found the problem(s) in my MBP (10.9.3, u/g from 10.8):
Open Console and find/open the launchd-shutdown.system.log in /var/log/com.apple.launchd
Search on the phrase: 'after the first signal was sent' (no quotes)
Check the numbers following 'Exited' in each line. One or more will be around 16-20 seconds, if the last shutdown was slow. These are the processes that are causing the delay.
In my case, two processes were slow: com.apple.AOSNotificationOSX and com.displaylink.displaylinkmanager
You need to find where these processes live via Finder (search with 'System files' 'Are included'), and insert an ExitTimeOut as described a few posts above.
I inserted the following ExitTimeOutts (the paths came from my Finder search for the com. files):
sudo defaults write /Library/LaunchDaemons/com.displaylink.displaylinkmanager ExitTimeOut -int 2
and
sudo defaults write /System/Library/LaunchDaemons/com.apple.AOSNotificationOSX ExitTimeOut -int 2
If your offending process is not one of these, you can modify the ExitTimeOut string accordingly.
Anyway, with these changes made, my MBP now shuts down in a second or two, with no apparent ill effects.