Ok. Here is the sort story of what I did:
As of 25 March 2016, there's new only one firmware update available for WR740N V6 on the TP-Link website.
It is with Rev Number 160325 and contains an uBoot update as well.
The new stuff here is this (quote from the website, marked in red):
The EU firmware was specialized for CE certificating and can’t be downgraded to other version, please click here for choosing your region and selecting the most suitable firmware version to upgrade.
For us as a developers this means that we'll no longer be able to flash custom or modified roms, because the firmware header is slightly changed.
Luckily it turns out that the changes are really slight.
I took the httpd executable from this new release (160325) and put it in IDA, to find out what was changed. Firstly I was thinking TP-Link changed the CRC-MD5 calculation method.
It turns out that in the subroutine called checkFirmware, they've added this code:
004EC7F0 loc_4EC7F0: # CODE XREF: checkFirmware+12C
004EC7F0 lw $t9, (off_5BA700 - 0x5BFD40)($gp)
004EC7F4 move $a0, $s0
004EC7F8 move $a1, $s1
004EC7FC jalr $t9
004EC800 li $a2, 0x10
004EC804 lw $gp, 0x40+var_30($sp)
004EC808 lui $v0, 0x5B
004EC80C loc_4EC80C: # CODE XREF: checkFirmware+A4
004EC80C lw $v0, -0x7770($v0)
004EC814 beqz $v0, loc_4EC99C
004EC818 move $v0, $0
004EC81C lw $t9, (off_5BA2DC - 0x5BFD40)($gp)
004EC824 jalr $t9
004EC82C lw $gp, 0x40+var_30($sp)
004EC830 bnez $v0, loc_4EC998
004EC834 addiu $s0, $s2, 0x120
004EC838 beqz $s0, loc_4EC8B0
004EC83C lui $a0, 0x58
004EC840 lw $t9, (off_5B997C - 0x5BFD40)($gp)
004EC848 jalr $t9
004EC850 lw $gp, 0x40+var_30($sp)
004EC854 move $a1, $v0
004EC858 lw $t9, (off_5B8540 - 0x5BFD40)($gp)
004EC860 jalr $t9
004EC864 move $a0, $s0
004EC868 lw $gp, 0x40+var_30($sp)
004EC86C bnez $v0, loc_4EC8C4
004EC874 lw $t9, (off_5B997C - 0x5BFD40)($gp)
004EC87C jalr $t9
004EC884 lw $gp, 0x40+var_30($sp)
004EC888 lui $a0, 0x58
004EC88C lui $a1, 0x58
004EC890 lw $t9, (off_5BA9E8 - 0x5BFD40)($gp)
004EC894 la $a0, aSysupfirmware_ # "sysUpfirmware.c:226"
004EC898 la $a1, aNotSupportThis # "not support this country! %s, cur special id %s"
004EC89C move $a2, $s0
004EC8A0 jalr $t9
004EC8A4 move $a3, $v0
004EC8A8 b loc_4EC98C
Basically the uBoot loader and httpd function updateFirmware are now checking not just the CRC-MD5, but a new field in the firmware header as well:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0x120 30 30 30 30 30 30 30 30 3B 34 35 35 35 30 30 30
0x130 30 3B
As text this looks like that:
In the previous versions of the firmware this section is NULL.
So what I did was to grab the here published firmware and to add this content on address 0x120, then recalculate checksum, and ... miracle... it was flashed successfully.
I am turning to developers and to wiki maintainers:
Please, add this information to the header compilation utils for TP-Link and update wiki for this particular Firmware Revision.
I guess this subroutine will be ongoing spread through out each and every TP-Link Device. It will not be an an insulated occurrence.