You can do parsing without extension method - just use local non-nullable value to pass it to TryParse method:
double? discount = null;
if (!String.IsNullOrEmpty(txtDiscount.Text))
{
double value;
if (Double.TryParse(txtDiscount.Text, out value))
discount = value;
else
errors.Add("Discount must be a double."); // discount will have null value
}
But I'd moved all this logic to extension.