So since in both paths all we want to do is invoke callback, it might be nice to write this as

    var json, err;
    try {
      json = JSON.parse(request.responseText);
    } catch (e) {
      err = e;
    }

    callback(json, err);

Just an idea though :)