Возможно, проблема в том, что $.post возвращает не промис, а jqXHR. В результате $.then() успешно разрешается этим объектом. Думаю, тут надо как-то так:
var t;
$.when($.post("get_json.php", function(res) {
t = res;
}, 'json').promise()).done(function() {
console.log(t);
});
Кстати, зачем нужно делать такой каскад: коллбэк, затем промис? Ведь в done результат тоже приходит, безо всяких переменных в замыкании.