I experienced this bug in ETW and unsurprisingly experienced it after in NTW. So I have successfully tested a modification of a NTW .save file that may work with ETW as these games are close. Below is what I did.

1) Install an editor. For my part, I used ESF Editor but SaveParser should also do the job.
2) Make of course a backup of the .save file.
3) Find the location which interests us by following the path below.

Code:
CAMPAIGN_SAVE_GAME
    CAMPAIGN_ENV
        CAMPAIGN_MODEL
            WORLD
                REGION_MANAGER
                    REGIONS_ARRAY[x]
                        REGION
                            SETTLEMENT
                                SIEGABLE_GARRISON_RESIDENCE
                                    FORTIFICATIONS_BLOCK[y]
                                        FORTIFICATION_DAMAGE_INFO
We can find an array of elements of type FORTIFICATIONS_BLOCK, each containing an object of type FORTIFICATION_DAMAGE_INFO with a set of attributes that I note "a ; b ; c" hereafter.

Example for undamaged city walls
array index 0 : 1 ; 0 ; 0
array index 1 : 1 ; 1 ; 0
array index 2 : 1 ; 2 ; 0
array index 3 : 1 ; 3 ; 0
4) Modify the appropriate attributes

For my part, I noticed that the array looked like that. The indices 4 to 7 of this array seem to correspond to those of the previous array.
array index 0 : 0.9 ; 0 ; 1
array index 1 : 1 ; 1 ; 0
array index 2 : 1 ; 2 ; 0
array index 3 : 1 ; 3 ; 0
array index 4 : 1 ; 0 ; 0
array index 5 : 1 ; 1 ; 0
array index 6 : 1 ; 2 ; 0
array index 7 : 1 ; 3 ; 0
Just modify the attributes of index 0 as follows and the walls should be repaired !
0.9 ; 0 ; 1 => 1 ; 0 ; 0

Note that if you delete array elements, ESF Editor seems to double the size of your .save file, as if it made a copy of the old content.

I didn't notice any corruption as a result of this modification in the new .save file but feel free to notify me if not.

Links
sourceforge.net/projects/esfeditor/
sourceforge.net/projects/saveparser/