Take a step back and look at what you wrote and you'll see that you are just as much of a hot head as the customer. Put both of you in a ring together and that'll make for some quality pay-per-view entertainment.
Steps 1 and 2 are there to defuse an already bad situation. I don't want to be a pushover, and I don't want to condone behavior like this. But in the immediate situation, if it comes down to a $5 copay or possibly getting fired for too many complaints, I'll give the $5. (Side note: you never know who you are up against. A coworker got fired for getting into an argument with the wife of a corporate higher up.) Of course, in the grand scheme of things, I don't want these things occurring repeatedly so I'll try to prevent them from happening altogether through step 3. A simple phone call was all it would have taken to prevent this confrontation.
'Integrity' is part of the problem. The values and principles that you try to uphold consistently are different to mine, those of the customer, and in fact, also different to those of retail pharmacy. I don't blame you for it because we are health care professionals and we were taught nothing about customer service principles in school. But retail is totally about customer service so that makes you like a fish out of water. Take a look at cops, flight attendants, call center reps, etc. They all know a thing or two about defusing conflicts and providing customer service, and they still do it with professionalism and integrity. I hope that one day you realize this and drop the attitude that you are above it all, and that your values and principles are always right. Otherwise these sort of confrontations will just happen over and over again until you get sick of it and quit, or get fired.