Сообщения проверки по умолчанию создаются при создании ModelBind (он же принимает данные запроса и применяет их к объекту). Это можно сделать с помощью стандартной формы отправки, или Ajax, или любым другим способом.
Сообщения проверки сохраняются в ViewData.ModelState.
Визуализация сообщений проверки выполняется с помощью HtmlHelpers, которые просто смотрят на ModelState и отображают любые применимые сообщения. HtmlHelpers выполняется на стороне сервера как часть рендеринга представления. Возвращение JSON пропускает рендеринг. Вместо этого вы можете вернуть частичное представление, которое будет отображать любые сообщения проверки, которые являются частью пользовательского элемента управления.
Тем не менее, если ваша модель действий контроллера связывает и возвращает JSON, она все равно сгенерирует правильную информацию проверки в ViewData.ModelState. Эта информация есть, если вы хотите ее использовать, но ее необходимо перенести в вашу модель, а ваш JavaScript-код на стороне клиента должен знать, что с ней делать.