Что может содержать DTO?
Dto - data transfer object, его задача - это передать данные. Ваш тимлид говорит верно, дто не должен содержать ничего другого кроме данных и тайпхинтинга.

Json у вас получится в какой-то точке кода, вероятно взаимодействующей с внешним миром: хттп, бд, файлы и т.д. вот именно в этой точке вам и следует делать пасинг и наполнение вашего дто
Что может пойти не так, что DTO от такой логики будет уже не DTO и какие могут быть проблемы?DTO - чисто инструмент переноса, в классическом ООП он выполняет роль сигнала для взаимодействия между абстрактными сущностями. По этому его задача хранить данные, а логика его построения должна быть отделена. Если у вас 10 дтошек, и что-то поменялось в логике построения, вы будете все десять штук менять, что уже выглядит странно и не очень логично. Напрашивается логичное решение - использовать фэктори, которая, в противовес дто, имеет только логику, и все манипуляции с данными сводятся в 1 место. Пишете фэктори, и на каждый источник у вас свой фабричный метод, а на выходе нужный дто.