I would try and avoid this if possible. The main reason is that in
order to estimate the milestone, you need to specify it. Which means
that the client and you need to fully document what is going to be
delivered. Many times, as you develop, the client and you will need
further clarification on the application which will almost always change
the initial specification. My experience has been that this translates
to more work than you initially estimated.
I would recommend that you estimate the total number of hours and let
your client know that it is just an estimate. Depending on the client’s
changes, that could go up or down. Also, try to work in short iterations
instead of long milestones. This “agile process” is best because you
don’t need to specify the application up front. You specify small bits
of functionality in very small iterations (like week or less) and that
way the application can evolve as more is understood.