Hi,
Firstly, a disclaimer. I am learning Mongo like yourself.
In general, something I've learned is, Mongo must be used as it best fits against how you (or your customers and their users) will be accessing the data stored. Being you are going to have a lot of smaller databases, the issue with file allocation size will be a factor. Mongo databases take up around 200MB as the default (1st file 64MB, 2nd file 128MB). The 32MB minimum is the size only when all the default settings, settings which are quite important for performance, like preallocation, standard allocated file sizes and the journal (which is more for atomically safe write operations) or a minimized oplog, are all turned down or off. This is not a good idea for a well running Mongo system and should be avoided.
I am not sure what you mean by "given that the DB's are 'naturally' dispersed across several servers". Mongo databases are not naturally dispersed, unless you yourself have them on different machines and then, I wouldn't consider that as natural.:) I can't imagine running db's on multiple machines for the sake of dispersity being cost effective either. From what I've learned, a minimum production set-up would be a 3 server replica set with some fairly decent hardware (especially with a decent amount of RAM). When access to the data becomes excessive for the replica set capabilities or when the size of the data starts to grow beyond a single server's capacities, that is when could consider scaling. You can scale vertically, in that you get bigger servers or you can scale horizontally with sharding. Sharding can be done at the collection level, so this doesn't come into play, in the question of one db per customer or not.
What does come into play is database maintenance, which you mention in point 6. If you mix customers over a small number of databases, then it becomes more of a chore and a possibility for mistakes to happen, if you have a lot of customer churn. If you're not sure your customers will be staying for a while, you might want to consider this aspect. Compacting is possible, but it also means downtime, unless you are on a replica set, which can mediate compacting downtime.
Your point 5 is also something I've been considering and there is no easy answer from what I've learned. I am not sure about your specs, but we are aiming at as little downtime as possible and any "movement" of data = downtime. We haven't come to a conclusion on the best practice for our "successful customers". I like to think of customers needing more database power (i.e. being noisy) as being a good thing.;)
Mongo is a RAM intensive application, because in order for it to be fast, it stores a lot the used or "hot" data in RAM (also known at the working or active set). This is a great aspect of Mongo, as it basically alleviates the need for a caching system like memcached, but also makes its operation costly (which is the same for any DB needing a caching system), as you can't just think you have 1TB of space available on disk and can then run 1TB of databases on that machine with say only 2GB of RAM. That isn't going to fly. I have yet to find any spec that says, X GB of used disk space = X GB of RAM and I don't think I will ever find one either, simply because you it is very hard to tell who needs what data when, especially for our type of system. So this is going to be a very tricky part of our Mongo usage.
For point 7. MongoDB is not really "schemaless". You still have to think about schema and data modeling. Let's call it semi-flexible schema. And I say semi-flexible, because yes, you can tack on fields at will to any document (and this is a beauty of Mongo), but you must also be aware that tacking on fields, which may go beyond the padded size of a document, when the document is updated, is a no-no in Mongo. This is because it means the document has to be physically moved to another part of the disk, causing a real knock in performance for updates of older records.
One other thing to remember too is Mongo write locks at the database level. If your application tends to be write heavy and will be for all of your customers and their users, this could come into play and might push you towards the one db per customer scenario. If you are making a "normal" web application, it probably isn't write heavy, so you are ok here.
We are actually thinking about going with a sort of hybrid system, but our requirements are a bit different than yours. Our customers won't have similar data schemas, or rather, we won't know what our customer's schemas will look like. We are going to have two systems and why I call it hybrid. The first and "starter system", will spread customers over a single database, to basically combat the 200MB default database size. We want to give each customer 50MB data storage to start. That means 4 customers per DB. This "starter" system will not be a full replica set, but rather 2 replicas and an arbiter (to save costs). It will be clear, data backups are on a daily basis only!!). As a customer grows and gets close to 200MB (which actually means they are already taking up 0.5GB!!), we will move them to their own database on a full blown replica set. This will be a planned move and we will make it clear, this will incur downtime. If the customer should get even bigger, then she could actually get moved to her own database cluster. The possible "downtime" needed for this move is, however, something we want to avoid (as obviously this customer is successful and we don't want to bother customer success!!!) and are still looking at ways to get this move to a newer server done as painlessly as possible.
I hope I could help and I am hot to hear the counters I'll be getting for my answers from the pros.;) Again, take my comments with a grain of salt. I am learning too.
Scott