The MSX was indeed capable of I/O through the joystick ports, because they were driven by the AY3-8910 PSG's I/O ports. In the ZX Spectrum, there were several interface standards but all were only capable of reading (input) from, not writing to the joystick port(s).
In the ZX Spectrum Next, the joystick ports are driven from FPGA pins so theoretically bidirectional I/O is possible, but unless you modify it yourself, the current Core is based on legacy (input-only) standards, with the newly added feature of driving two SELECT pins high or low, so yes you can certainly repurpose these pins (1 in each joy port) as output lines, and develop something similar to the bit-banged RS-232 serial interfaces throug the joystick ports that alreaady exist for the MSX.
Here's some recently published information on how to drive the joy ports on the Next from the SD v0.8e Distro:
Finally, remember that if a serial interface can meet your need, the ZX Next also have two powerful serial interfaces built-in: I2C (used on the RTC interface) and SPI (used by the SD storage and Raspberry Pi interfaces).A second Kempston port (IN 55 – 0x37) has been added which follows the same format as port 31 (0x1F).
Supports Sega Megadrive 3 (and 6) button Joypads. Currently 4 buttons can be used at maximum. The buttons are returned by reading the Kempston joystick ports (IN 31 / IN 55). Sega 6 XYZ buttons are mirrored on ABC. The ‘MODE’ button on a Sega 6 pad cannot be read.
Bits 7..0 are as follows:
6: A / X
5: C / Z
4: B / Y
The following register has been updated to include these extra joypad modes.(R/W) 0x05 (05) => Peripheral 1 setting:
bits 7-6 = joystick 1 mode (LSB)
bits 5-4 = joystick 2 mode (LSB)
bit 3 = joystick 1 mode (MSB)
bit 2 = 50/60 Hz mode (0 = 50Hz, 1 = 60Hz)(0 after a PoR or Hard-reset)
bit 1 = joystick 2 mode (MSB)
bit 0 = Enable Scandoubler (1 = enabled)(1 after a PoR or Hard-reset)
000 = Sinclair 2 (67890)
001 = Kempston 1 (port 0x1F)
010 = Cursor (56780)
011 = Sinclair 1 (12345)
100 = Kempston 2 (port 0x37)
101 = MD 1 (3 or 6 button joystick port 0x1F)
110 = MD 2 (3 or 6 button joystick port 0x37)
But if you really need a 8 or 16 bit parallel interface (as you first mentioned), it's still easier to use an external device on the Expansion Bus where you have access to the Z80 address and control lines.