I have no idea how the AIX shell handles this, so I can't comment on that.
The problem has to do with the way that the processes in pipes communicate. Each process in a pice statement spawns a proper subshell, and we all know that variables will live only inside the shell instance they are declared (maybe in AIX they all are global? no real idea). In your case, the read command is spawning a new shell to run, which effectively means that whatever variable it sets after reading a string will be vaporized as soon as the read shell is closed, and hence it will not be visible to the next echo.
A solution would be to run both in the same subshell
Code:
$ echo foo | (read bar && echo $bar)
foo