It's something of a service industry trope, that "the customer is always right". However, in the reality of bespoke software development this isn't always, or even often the case. In fact, it's my experience that when developing a bespoke solution the customer often understands what they are doing, but less so what they need. This has the inevitable consequence that the requirements given are going to be incomplete and inaccurate. It's not a failing of the customer, it's simply a conflict between the use, or intended purpose and the logical/mechanical methods by which the required behaviour can be achieved.
It is a basic conflict between man and machine, analog and digital. The way that we process information is not necessarily the way that, for example, paper systems people use physically handle the data. It serves everyone to find and implement the best solution from the off. Sadly it's also my experience that the majority of people making the development decisions are more interested in our misguided old phrase.
"That's not in the spec" is simply not a good reason to fail your customers. They'll remember it, and they'll not have the functionality they need to efficiently operate their business. You've cost them money, and it's going to cost you in the long run. It's also true that most of these issues can be easily spotted by a little collaboration, a little feedback and some dialog. A view of each side of the problem is after all a view of the whole problem.