Первый вариант. Считаю, что этот вариант самый правильный
Самое простое - заменить подключение
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
на
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
В этом случае - ядро будет подключено (соответственно, $APPLICATION будет доступен) , но html-лэйаут не будет выводиться.
Второй вариант.
Перед вызовом компонента сделать
$APPLICATION->RestartBuffer();
Это почти как ob_start(), только через Api битрикса.
В обоих случаях подключать файл с футером не нужно.
Ну и
header('Content-Type: application/json');
вставить не помешает