Note: this post is about regular ASP.NET Validators, not Atlas Validators.
I am using the July CTP of Atlas. I have a Web form with some fields and validators inside an UpdatePanel and some fields and validators outside. In this setup, any asynchronous postback breaks subsequent client-side validation. After an AJAX call, any button click outside the UpdatePanel causes the page to post back to the server, despite the fact that some client-side validators (outside the UpdatePanel) are invalid.
This seems to happen because as soon as the async. postback happens, JavaScript code is being sent back to the client that declares a Page_Validators array containing only the validators inside the UpdatePanel. When the client-side validation is fired next time, only the validators in the new Page_Validators array are validated, the ones in the original one (which contained all validators on the page) are ignored.
This behavior appears to be caused by the fact that the Render() method on BaseValidator calls a method called RegisterValidatorDeclaration(), which in turns calls Page.ClientScript.RegisterArrayDeclaration() on the Page_Validators JavaScript array. When an async. postback happens, Render() is called only on the validators in the UpdatePanel, and thus the resulting array contains only those validators. The expected behavior, IMHO, is that the Page_Validators array is not regenerated at all.
This is just my theory from reading System.Web code via Reflector, I cannot verify it.
The test page below can be used to easily reproduce the problem.
Any fix, workaround or suggestion would be greatly appreciated! Atlas would be a great improvement to our application's UX, but if it breaks (existing) validation, we will not be able to use it 
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
lblResult.Text = "Button 1 Clicked!"
End Sub
Protected Sub btn2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
lblResult.Text = "Button 2 Clicked!"
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Atlas / Validator Bug Test</title>
</head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager runat="server" ID="ScriptMgr" EnablePartialRendering="true"
EnableScriptGlobalization="false" />
<h3>
Atlas / Validator Bug Test</h3>
Instructions: click Button 1, then erase text from the Text 2 textbox and click
Button 2. Postback occurs where it shouldn't!
<asp:ValidationSummary runat="server" ID="vs1" />
<atlas:UpdatePanel runat="server" ID="upValidation">
<ContentTemplate>
<asp:Label ID="lblResult" runat="server" ForeColor="blue" />
<br />
<br />
<asp:RequiredFieldValidator ID="rqfv1" runat="server" ControlToValidate="txt1" ErrorMessage="Enter Text 1"
Text="*" />
Text 1:
<asp:TextBox ID="txt1" runat="server" Text="foo" />
<asp:Button ID="btn1" runat="server" Text="Button 1" CausesValidation="true" OnClick="btn1_Click" />
</ContentTemplate>
</atlas:UpdatePanel>
<asp:RequiredFieldValidator ID="rqfv2" runat="server" ControlToValidate="txt2" ErrorMessage="Enter Text 2"
Text="*" />
Text 2:
<asp:TextBox ID="txt2" runat="server" Text="bar" />
<asp:Button ID="btn2" runat="server" Text="Button 2" CausesValidation="true" OnClick="btn2_Click" />
</form>
</body>
</html>