Как передать параметр из вложенной функции?
почитайте про асинхронность в JavaScript
на момент, когда запрос выполнится, и вызовется success, return flag; уже давно отработает 
можно передавать callback в функциюfunction query(data, mid, elem, callback) {
  $.ajax({
    /* ... */
    success: function (server_response) {
      /* ... */
      if (data.status) {
        status(true, data.msg)
        callback(true);
      } else {
        status(false, data.msg)
        callback(false);
      }

    },
    error: function (err, texterr) {
      status(false, 'error_ajax' + texterr)
    }
  });
}


query(data, mid, elem, (flag) => {
  console.log(flag);
});
можно промисом function query(data, mid, elem) {
  const executor = (resolve, reject) => {
    $.ajax({
      /* ... */
      success: function (server_response) {
        /* ... */
        if (data.status) {
          status(true, data.msg)
          resolve(true);
        } else {
          status(false, data.msg)
          resolve(false);
        }
  
      },
      error: function (err, texterr) {
        status(false, 'error_ajax' + texterr)
        reject();
      }
    }); 
  };
  
  return new Promise(executor);
}


query(data, mid, elem).then((flag) => {
  console.log(flag);
});
если хочется асинхронный код писать синхронно, то можно воспользоваться промисами и async/await(async () => {
  const flag = await query(data, mid, elem); 
  console.log(flag);
})();
Вы делаете асинхронный запрос.
Самое простое решение - добавить async: false в параметры ajax. Но гораздо лучше разобраться в этом вопросе и понимать, что вы делаете и зачем оно вам надо.