At Daywize we have the same problem. We do create seperate branches for each customer. And it is no problem that these branches are not connected to a cloud slot. You just have to create mda that you upload yourself.
There are still some problems we hope Mendix will solve. For instance, you can change the feedback widget project ID for each branch, but it would be nice if I also could point the modeller to right project ID. Because now it will show me the feedback of the main branch instead of the client branch. We put a feature request for that. And yes, it would be real nice if we could manually set the node. Then even the Deploy to cloud button would work. I suggest filling feature requests. If more partners want these kind of features they may consider implementing them.
You can create SAAS solution for this. That means that every user is linked to a client and sees only his client' data. This is also known as multi-tenant. It would need a full blog to describe, but in short:
This is the bare mininum. Don't skip one step. Don't skip testing phase.
To add on to Chris's idea - I have created a similar structure. I also needed to offer different features/capabilities to different clients, based on their subscription level. To accomplish this, I added boolean attributes to the Client entity for each feature I wanted to be able to turn on and off. Then within the application, tabs, buttons, etc. that provide access to the premium features can be turned on and off in a Client configuration page accessible to a 'Super Administrator' role, i.e. not a Client user but an administrator of the overall system. In this way, once a client orders a new feature, turn the switch on and it is available for him.
Mendix can't provide the option to have multiple acceptance and production environments with 1 teamserver project. It is 1 project with 1 acceptance and production environment.
It is possible to build 1 solution for multiple customers, but it has his challenges. The biggest one is the performance and security in the model. The data must be separated with the entity access by adding Xpath constraints, just as Chris de Gelder describes. Those queries will slow down the performance. Another disadvantage is your styling. You can't add custom CSS styling per customer. Of course you can add styling options in your model, but that will also slow down the performance of the screen. The application has to calculate and render more before showing the complete form.
There is a workaround for this problem. It is possible to upload an MDA to a public cloud node. You can start per customer a Mendix project and do nothing with the teamserver, but use the cloud nodes that are attached. Upload a MDA to the project and place them in the cloud node.