I've found out where is the problem. I don't know yet why, but ID property of control must not contain '$' character. In my case, UniqueID property returned string like 'ctl00$MainContent$ctl00', so complete ID of control was 'Name-ctl00$MainContent$ctl00'. Replacing '$' with other symbol (to preserve uniqueness) solves the problem. By the way, FindControl method also began to work.
_textBoxName.ID = "Name_" + UniqueID.Replace('$', '_')
Also note, that symbol '-' as validator's ID will cause syntax error in JS (as ASP.NET will try to create JS objects with the same name), so it is not recommended to use it either.