AJAX form - replacing #default_value not working
This is taken from the description of #default_value in the form api documentation:

The value of the form element that will be displayed or selected
initially if the form has not been submitted yet

Because your form has been submitted, it wont be using #default_value. Just use #value, the user will still be able to change it.
2021 edit.....
As people have pointed out, the above is wrong as although it will allow you to set the value, it wont allow the user to submit an altered value.
Now using Drupal 9, in a form alter, I needed to set some default field values when an ajax button (which I inserted) was clicked.
I needed to set default values on the node &quot;body&quot; field and &quot;field_url&quot; link field.
I removed the user input for these fields before setting a default value.
$userInput = $form_state-&gt;getUserInput();
unset($userInput['body']);
unset($userInput['field_url']);
$form_state-&gt;setUserInput($userInput);

$form['body']['widget'][0]['#default_value'] = 'my default value set after ajax callback';
$form['field_url']['widget'][0]['uri']['#default_value'] = 'my default value';

To be honest, I am not 100% sure it is the correct way, but it does work.