Как затормозить выполнение javascript до получения callback?
Никак.
Запрос выполняется асинхронно. Вам нужно запускать рендер после получения ответа, или переписать все так, чтобы эти данные были необязательными на момент начала рендера.
findPage = function(req, json, cb) {
    db.pages.find({
        url: req
    }, function(err, docs) {
        if (err) cd(err);
        console.log(docs);
        json = docs; // Искомые данные для страницы
        cb(null, json)
    });
};

app.use(function *() {
    'use strict';
    var json, req;
    req = this.request.url;
    console.log(req);
    findPage(req, json, function(err, data) {
        if (err) throw err;
        page = this.render('index', {page: data}, true) // рендер страницы
    });
});
И вы тут используете async, его бы юзали для последовательного выполнения задач.
https://github.com/caolan/async#seriestasks-callback