以下のrubyのコードがrubyのバージョンによって挙動が違います。
これについて、公式のドキュメントはありますでしょうか?

また、組み込みメソッドがスレッドセーフかどうかは何を参照すれば良いでしょうか?

THREAD_NUM = 3

Array.new(THREAD_NUM) do
  Thread.new do
    10.times do
      puts "hoge"
    end
  end
end.each(&:join)

puts "-"*5

Array.new(THREAD_NUM) do
  Thread.new do
    10.times do
      print "hoge\n"
    end
  end
end.each(&:join)

$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
$ruby thread.rb
hoge
hoge
hoge
hoge
hogehoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge

hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
-----
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]
$ ruby thread.rb
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
-----
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge