SoftwareSerial

Since two of those linked pages were so crappy, I just did a quick test myself to be sure.
This works fine:-

UNO code:-

// UNO code:-

#include <SoftwareSerial.h>

const byte rxPin = 2;
const byte txPin = 3;

SoftwareSerial mySerial(rxPin, txPin);

void setup()
{
    Serial.begin(115200);
    mySerial.begin(9600);
    mySerial.print('A');
}

void loop()
{
    if (mySerial.available())
        Serial.write(mySerial.read());
}

ATTiny85 code:-

// ATTiny85 code:-

#include <SoftwareSerial.h>

const byte rxPin = 3;         // Physical pin 2
const byte txPin = 4;         // Physical pin 3

SoftwareSerial mySerial(rxPin, txPin);

void setup()
{
    mySerial.begin(9600);
}

void loop()
{
    if(mySerial.available())
    {
        char c = mySerial.read();
        if(c=='A')
            mySerial.println("'A' received");
    }
    mySerial.println(F("Hi there from 'tiny85"));
    delay(1000);
}

Result:-

'A' received
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85
Hi there from 'tiny85