Have you set an error email address on the global configuration page? If so, do you get any error message by email after a transaction is complete? If not, please try setting an email address there so that you can capture any error messages.
Yes, we have an error email address set up but the client has not received any error notifications at this address.
Make sure your website is accessible over the internet (eg. if you are running on localhost, authorize.net will not be able to call you back).
It is definitely accessible over the internet - not running on localhost.
Also make sure all of the settings are correct in the gateway settings page (login ID, hash, etc.)
These settings are all correct because the payments are being processed correctly at Authorize.net and the client receives an email from Authorize.net confirming the payment. The only step that seems to be missed is completing the order.