Я думаю, что одним из решений является размещение элемента управления TextBox внутри Panel, а затем динамическое добавление элемента управления RequiredValidator в обработчик событий Page_Load.
<asp:Panel ID="Panel1" runat="server">
<MyCustomTextBox ID="TextBox1" runat="server"></MyCustomTextBox>
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" />
тогда
protected void Page_Load(object sender, EventArgs e)
{
var validator = new RequiredFieldValidator();
validator.ControlToValidate = "TextBox1";
validator.ErrorMessage = "This field is required!";
Panel1.Controls.Add(validator);
}
Я поместил CustomTextBox внутри панели, чтобы убедиться, что место контроля валидации корректно при добавлении