There may be other daemons which are timing out at 20 seconds.
You can use Console to find out which ones.
1) Perform a shutdown
2) Start again, open Console
3) Open system.log from the left pane
4) Enter "exit timeout" in the search field on the top right
5) You would get a list of daemons/agents which are timing out, they have a 20 second timer
Use the following commands to manually specify their timeout to 2 seconds:
In terminal, type the following: (example here is com.apple.coreservices.appleid.authentication.plist)
sudo launchctl unload /System/Library/LaunchAgents/com.apple.coreservices.appleid.authentication.plis t
sudo defaults write /System/Library/LaunchAgents/com.apple.coreservices.appleid.authentication ExitTimeOut -int 2
sudo launchctl load /System/Library/LaunchAgents/com.apple.coreservices.appleid.authentication.plis t
Some plists are present in the LaunchDaemons folder instead of LaunchAgents. Modify the above commands accordingly.
These commands will kill the errant agents/daemons in 2 seconds instead of the new default of 20 seconds since Lion.