Как делать $.getJSON пока не придут подходящие данные?
как вариант что то вроде этого)var Ctrl = function (condition) {
	var self = this;

	this.condition = condition;
	this.result = null;

	this.init = function () {
		this.check();
	};

	this.check = function () {
		$.getJSON('/path/to/file', {param1: 'value1'}, function(data, textStatus) {
		  if (data.result !== self.condition)
		  	self.check();
		  else
		  	self.result = data.result;
		});
	};

	this.getResult = function () {
		return this.result;
	};

	this.init();
}

var condition = 'условие для ответа';
var controller = new Ctrl(condition);
var result = null;

var myInterval = setInterval(function() {
	
	result = controller.getResult();

	if (result) {
		console.log('ожидаемый ответ: ', result);
		clearInterval(myInterval);
	}

}, 4000);
Вынесите код, вызывающий getJSON в отдельную функцию и вызывайте её из callback'а.