Для организации работы с асинхронным кодом (
XMLHttpRequest или 
setTimeout) нужно использовать функции, возвращающие объекты 
promise, поскольку функция завершит свою работу в потоке раньше, чем будет выполнен асинхронный вызов.
В 
jQuery для этого реализован 
Deferred Object. Причём в методе 
ajax() он реализован по умолчанию.
Вот примерно так с проверкой на наличие объекта:
testj('1').then(function (json) {
	console.log(json);
});
function testj (e) {
	var d = $.Deferred(),
		x = ...; //Проверяем, вдруг объект уже получен и сохранён
	if (x) { //Объект уже есть
		d.resolve(x);
	} else { //Объект нужно загрузить
		$.ajax({
			url: 'http://localhost/ajax.json?get=' + e,
			dataType: 'json'
		}).done(function (data) {
			... //Например, сохраняем
			d.resolve(data);
		});
	}
	return d.promise();
}
И откройте тайну — зачем вам 
jsonp? Вы не используете 
callback.