Как заставить javascript дождаться ответа ajax'а?
Необходимо пробросить в `create_markers` коллбек, который будет вызыван уже после того, как данные загрузятся и объект с маркерами заполнится.function create_markers(map, fn) {
   var markers = {}
   $.ajax(..., {
       success: function(...) {
         ...
         fn(markers);
       }
   });
}var map = create_map();
    
create_markers(map, function(markers) {
  // показывает, что объекты в массиве есть (об этом читайте далее)
  console.log(markers);

  // показывает 0 (об этом читайте далее)
  console.log(markers.length);

  // включает отображение маркеров
  setAllMap(map, markers);  
});
В вашем случае объект пустой, по причине того, что возврат из функции пустого объекта происходит раньше, чем будет получен ответ от сервера. Дальше гуглим про асинхронность в js.
в ajax укажите 		async:  false, но проблема в том что браузер встаёт до тех пор пока не загрузятся данные, т.е. в лучшем случае нужно использовать callbacks.