Quick answer is yes ... after some more testing I found out that NVDA will read the hidden span tag that is the validator error text.
The issue I was having was in making a required validator have its error message receivable by NVDA. Unfortunately the error is shown after the IsValid function is fired ... making the event fire after a postback. NVDA would see the page with the error messages, but not know that they were new.
To fix it I'm firing the validator on the blur event, as shown below.
I added a blur event to the control being validated, and called the validator attached to that control
onblur="validateControl(RequiredFieldValidatorID)"
The function called uses the ValidatorValidate function.
function validateControl(n) {
ValidatorValidate(n);
}
This makes a required validator fire on blur. Still need to refocus on the control that has an error, but I think I'll need to catch the tab and redirect ... work in progress.