One of the best compliments I receive on the job is that I do more than was asked. When customers think you do more than expected, the result is future work and excellent references. Since the normal result is that consultants and IT professionals over commit and under achieve, when one person over achieves, they stand out from the crowd.
Of course, there are some things you should ~not~ do "over and above" the customer requirements. For one, you should not add unnecessary functionality to the application or project. You should be able to determine where added functionality can be provided, and recommend it to the customer. This will allow the customer to determine how to extend the scope of the project within the project budget and business needs. This will add value to the project.
For anther, you should not add code for the sake of adding code. You should not rewrite existing applications or programs just for the sake of rewriting. You ~could~ build new programs using modular techniques, separating the database layer from the application layer, introducing new techniques in code that performs the required business functionality. But, don't stop there - teach the customer’s development team those same techniques. Of course, be careful not to increase their maintenance costs, which can happen if you add code and use techniques that the customer cannot easily understand.
As to what you ~should~ do, there are some simple things. Get your work done under budget and before time. Offer your advice on new approaches and techniques. Provide suggestions to where the project can be improved and the design enhanced. Use your experience to take the customer to a new level. Don’t argue, if the customer does not want to be led, then do a stellar job and leave knowing you did more than expected.