Neither the client, nor the consultant will be fully aware about the requirements, right from day #1. So, you need to follow an iterative process. You need to work with the client, to understand the requirements, and at times, to make him understand what he need.
A good process to follow in such cases is the Scrum process. In Scrum, you interact with the stake holders frequently, and you improve you product through various iterations. So, you can scope your requirements for various iterations, and each iteration ideally should have deliverables.
Everyone knows that you can't build Rome in a day, and any customer will understand this if you communicate in the right manner.
Scrum is an Agile process framework that allows organizations to continuously direct the project toward early delivery of real business value through the frequent and regular delivery of high quality software. In this way, requirement gaps can be caught as early as possible. Of course, I'm not going to detail the entire scrum process - but wanted to hight light that if used properly, it can really solve a lot of problems later.
As a summary, in Scrum, you have a high level product backlog, and each product backlog entry is splitted to multiple tasks. A sprint is a set of such tasks from one or more product backlogs. The set of tasks for one sprint constitutes the sprint backlog. A sprint has a defined time line and deliverables.
The main roles in Scrum are the ScrumMaster who maintains the processes and works similarly to a project manager, the Product Owner who represents the stakeholders, and the Team which includes the developers.
Read Wikipedia article about Scrum here for a fairly good introduction. http://en.wikipedia.org/wiki/Scrum_(development)
Note - If you are working in Microsoft Team System, you might consider using Scrum for team system here.