Move data from 4 shard, replicated mongodb cluster to a single server without downtime
In your scenario there is a good discussion on this already on the Mongo Jira server on unsharding a database:
https://jira.mongodb.org/browse/SERVER-9845

Test and stage these steps using your real data in a non prod environment repeatedly until you are confident and find one that works:

database = 'test'
collection = database + '.fs.chunks'

sh.stopBalancer()
use config
primary = db.databases.findOne({_id: database}).primary

// move all chunks to primary
db.chunks.find({ns: collection, shard: {$ne: primary}}).forEach(function(chunk){
    print('moving chunk from', chunk.shard, 'to', primary, '::', tojson(chunk.min), '--&gt;', tojson(chunk.max));
    sh.moveChunk(collection, chunk.min, primary);
});

// unshard
db.collections.remove({ "_id" : "test.fs.chunks" })
db.chunks.remove({ ns : collection })

// flush all mongos, is this neccessary?!
use admin
db.runCommand({ flushRouterConfig: 1 })


Note now you have unsharded your data.  If you don't want to just directly unshard it before sending it over to the new cluster, then setup the new cluster sharded, and after it's synched then unshard it.