Вкратце, CALLBACK_FUNC записывается в init.php, но она вам не нужна. Потому что, как я понял, эта функция служит для поддержки актуальности корзины, но так как вы подменили цену, то callback в корзине будет ставить старую цену (а получить искусственно сгенерированную цену в init.php уже не получится). Просто оставьте поле CALLBACK_FUNC пустым.
Тоже повозился с CSaleBasket::Add . У меня товар не добавлялся в корзину, потому что я не указал в arFields обязательное поле CURRENCY