Handling modifications of fields within a document
I have rarely seen a use case where nested documents were a valid way to go. Sooner or later, any combination of the following the problems occur:


The BSON size limit of 16MB / doc is reached.
Exceeding the padding size of the documents leads to frequent (costly) document migrations.
The more complicated a model gets, the more complicated data manipulation gets - leading to longer maintenance and development times.


My suggestion would be to have independent user and client documents and look them from the client side. This way, a user can even have billions of clients and you still won't run into one of they mentioned problems.

Allowing the user to modify the persisted fields is pretty much a nightmare from the developers point of view. How do you display a decent input view? Or the output? You'd either have to parse the user specific structure and construct both views accordingly or you'd have to store meta information. I'd probably go with the approach to allow them to store additional fields in independent documents like this (which ironically is a use case for embedding documents ;) ):

{
  _id: new ObjectId(),
  user: owningUser,
  // If you want different fields for different customers
  customer: appliedTo,
  fields:[
    {name:"Date of Birth", type:"Date", value:ISODate("2015-05-05T03:46:00-01:00")},
    {name:"discount", type:"Float", value: 7.5}
  ]
}


This way, you'd have the user limited to some 16MB of additional data per customer and you have an idea for how to parse the data with a rather simple model. Setting indices on user and customer should make this efficient, too.