I am a Wind Mobile customer in Canada, and I found out what the problem is.
The process Apple uses is as follows:
When you turn iMessage on, the iPhone sends a text message to Apple. It will go to one of several numbers in the UK. When Apple gets the message, they generate a response. This response uses something called Application Port Addressing to direct the message to a specific process running on the phone.
The only way to see these messages is to dump your baseband logs. Apple has instructions for doing this on their developer site under bug reporting.
The initial problem with Wind Mobile was you would never see the reply message from Apple. One could login to myAccount on the Wind site and check their usage and only see the outgoing messages. This recently changed, and at least for me, I started seeing the reply from Apple. Still, no iMessage activation with phone number.
In the iPhone baseband logs, the SMS messages can be read in PDU format. This is basically just a HEX representation of the message with some other data about how it should be delivered and where it came from. There are several online decoders that can interpret the message and give you something readable. Decoding the SMS PDU that came from Apple showed that something was wrong with it. After some minor manipulation of 2 of the fields in the PDU, the problem turned out to be with the encoding bit for the USER DATA of message. It was set to 8 bit and should have been 7 bit. Because of this problem, the length bit for the USER DATA was also wrong, as you can fit more data in the same number of bytes using septets than you can with octets. After changing these two bits, the online decoders displayed the correct message.
Where does this data change? Hard to say. We have to assume that Apple sends it correctly. Therefore it must be getting corrupt somewhere between Apple and the iPhone on Wind's network. There are applications called SMPP gateways that allow messages to be sent across networks. I suspect the problem is with one of these.
Can this be worked around without the help of Wind? The short answer is yes, but it's complicated. You can take the corrupt message from the baseband logs, reformat it as an SMS Submit PDU, and send it to your iPhone's phone number.
This requires that you have another phone with a working SIM that can be used as a GSM modem. Not all phones have this capability. I used an old Nokia 5230. I was able to plug it in to my Mac and used the Shareware app ZTerm to send AT commands to it. I sent the re-formulated response message from Apple to my iPhone number via the old Nokia and now iMessage works with my phone number on Wind. I then did the same for my wife's iPhone and now hers works as well.
After going through this process, who do I point the finger at? I point it squarely at Wind. It is their responsibilty to ensure a message that uses Application Port Addressing is not corrupted on their network.