First off, let me say that I've been plenty guilty of all of these things myself (and still am, despite my best efforts), so don't take this personally. Secondly, I tend to see everything as black and white, with very little grey between. I, contrary to most people, think this a good thing. It's fuzzy logic - it removes the endless, pointless focus on the trivial and gets back to the heart of the issue. If someone is desperate to focus on grey, I say "fine, the instant the black and white is sorted, we'll get right on to that", and that's last I hear on the subject. 99% of grey is just a convenient place to hide from facing up to the black and the white :)
I'm afraid that I believe, from your question, that trying to change this person's behaviour is just hiding from inconvenience. If you want things tested every time, make it a rule. If he doesn't follow the rules, discipline him. If you don't do this, you can't expect anything to change. You've tried the 'hope he takes the responsibility for himself' approach, and it hasn't worked.
With that in mind, it seems to me that your rogue programmer is not the problem, he is a victim of the problem. He's the water coming out of a bucket with a hole in it. Well, guess what? water flows, and if you want to keep it in a bucket, you have to make sure the bucket has no holes. Trying to change the water's behaviour is ignoring the hole in the bucket. "Not enough testing due to time constraints" is a problem with your time estimates, or with something based on your time estimates. No testing == broken products, end of story. Anytime that doesn't hold, you can count yourself just as lucky as when you win a few quid from the lottery.
Your rogue's choice, given these restraints and regardless of any disciplinary problems, was to test properly or finish on time, and he chose the latter - he could just as easily have chosen the former, and then you'd have still had nothing to show your client. Ditto with your own testing before your visit. (Remember - discard the grey. If he was off sick for a week during the rush, that is what most people would call a grey area. It's not. It's somewhere to hide from the black and white issue that you don't have a plan to cover something unforeseen like a staff sickness.)
The real problem here is why there wasn't enough time to test, which, without specific detail I can only approach by stabbing blindly at common reasons:
Did you bind yourself to an optimistic time estimate due to a client deadline? Then offer clients x functionality on x date followed by y functionality afterwards. Stand firm on this offer. By all means tell them that you think y will also be ready by x, but don't guarantee it. Walk away if needs be, or there's no point trying to solve these problems in the first place.
Did you bind yourself to a quote based on an optimistic time estimate? Then evaluate your estimation procedure and safeguards, or switch to per-time billing.
Was your contract not tight enough to protect you from delays beyond your control? Go see a lawyer about that spangly new contract you'll be using from now on, the one that doesn't shoot you in the foot every time practice doesn't hold up to theory.
Did you bump the job down to the last minute to focus on other jobs? Take on less and accept the business-success level that that dictates, or invest in a setup that can make more efficient use of your time. (Or raise your prices - some clients will pay, some won't. You have to find the right balance, but it's nearly always possible to earn the same profit by charging more to fewer clients.)
Was it dictated by an un-informed position of authority? That's a whole other ball game, but if that's what happened, you're transferring your failure (to convince the higher-ups of the truth of the situation) onto your rogue programmer. That makes you the bad guy, and makes me on his side :)